## 1. 添加cmake版本说明
#cmake_minimum_required(VERSION 3.1.3)
## 2. 声明工程名称
#project(speech_server)
#
#set(target "speech_server")
## set(test_client "speech_client")
#
## 3. 检测并生成ODB框架代码
##   1. 添加所需的proto映射代码文件名称
#set(proto_path ${CMAKE_CURRENT_SOURCE_DIR}/../proto)
#set(proto_files speech.proto)
##   2. 检测框架代码文件是否已经生成
#set(proto_hxx "")
#set(proto_cxx "")
#set(proto_srcs "")
#foreach(proto_file ${proto_files})
##   3. 如果没有生成，则预定义生成指令 -- 用于在构建项目之间先生成框架代码
#    string(REPLACE ".proto" ".pb.cc" proto_cc ${proto_file})
#    string(REPLACE ".proto" ".pb.h" proto_hh  ${proto_file})
#    if (NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}${proto_cc})
#        add_custom_command(
#            PRE_BUILD
#            COMMAND protoc
#            # -I ${proto_path} --experimental_allow_proto3_optional
#            ARGS --cpp_out=${CMAKE_CURRENT_BINARY_DIR}  ${proto_path}/${proto_file}
#            DEPENDS ${proto_path}/${proto_file}
#            OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${proto_cc}
#            COMMENT "生成Protobuf框架代码文件:" ${CMAKE_CURRENT_BINARY_DIR}/${proto_cc}
#        )
#    endif()
#    list(APPEND proto_srcs ${CMAKE_CURRENT_BINARY_DIR}/${proto_cc})
#endforeach()
#
## 4. 获取源码目录下的所有源码文件
#set(src_files "")
#aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/source src_files)
## 5. 声明目标及依赖
#add_executable(${target} ${src_files} ${proto_srcs})
## 7. 设置需要连接的库
#target_link_libraries(${target} -lgflags -lspdlog -lfmt -lbrpc -lssl -lcrypto -lprotobuf -lleveldb -letcd-cpp-api -lcpprest -lcurl /usr/lib/x86_64-linux-gnu/libjsoncpp.so.19)
#
#
#set(test_files "")
#aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/test test_files)
#add_executable(${test_client} ${test_files} ${proto_srcs})
#target_link_libraries(${test_client} -lgflags -lspdlog -lfmt -lbrpc -lssl -lcrypto -lprotobuf -lleveldb -letcd-cpp-api -lcpprest -lcurl /usr/lib/x86_64-linux-gnu/libjsoncpp.so.19)
#
## 6. 设置头文件默认搜索路径
#include_directories(${CMAKE_CURRENT_BINARY_DIR})
#include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../common)
#include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../third/include)
#
##8. 设置安装路径
#INSTALL(TARGETS ${target} ${test_client} RUNTIME DESTINATION bin)
#

########################################
###修改后版本
########################################

# 1. 添加cmake版本说明
cmake_minimum_required(VERSION 3.1.3)

# 2. 声明工程名称
project(speech_server)

set(target "speech_server")
set(test_client "speech_client")

# 3. 检测并生成ODB框架代码
set(proto_path ${CMAKE_CURRENT_SOURCE_DIR}/../proto)
set(proto_files speech.proto)

set(proto_srcs "")
set(proto_cxx "")
set(proto_srcs "")
foreach(proto_file ${proto_files})
    string(REPLACE ".proto" ".pb.cc" proto_cc ${proto_file})
    string(REPLACE ".proto" ".pb.h" proto_hh  ${proto_file})

    # 如果没有生成，则预定义生成指令 -- 用于在构建项目之间先生成框架代码
    if (NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/${proto_cc})
        add_custom_command(
            PRE_BUILD
            COMMAND protoc
            ARGS --cpp_out=${CMAKE_CURRENT_BINARY_DIR} -I${proto_path} --experimental_allow_proto3_optional  ${proto_path}/${proto_file}
            DEPENDS ${proto_path}/${proto_file}
            OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${proto_cc}
            COMMENT "生成Protobuf框架代码文件:" ${CMAKE_CURRENT_BINARY_DIR}/${proto_cc}
        )
    endif()
    list(APPEND proto_srcs ${CMAKE_CURRENT_BINARY_DIR}/${proto_cc})
endforeach()

# 4. 获取源码目录下的所有源码文件
set(src_files "")
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/source src_files)

# 5. 声明目标及依赖
add_executable(${target} ${src_files} ${proto_srcs})

set(test_files "")
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/test test_files)
add_executable(${test_client} ${test_files} ${proto_srcs})
target_link_libraries(${test_client} -lgflags -lspdlog -lfmt -lbrpc -lssl -lcrypto -lprotobuf -lleveldb -letcd-cpp-api -lcpprest -lcurl /usr/lib/x86_64-linux-gnu/libjsoncpp.so.19)

# 7. 设置需要连接的库
find_package(gflags REQUIRED) # 确保 gflags 被正确找到
target_link_libraries(${target} gflags spdlog fmt brpc ssl crypto protobuf leveldb etcd-cpp-api cpprest -lcurl /usr/lib/x86_64-linux-gnu/libjsoncpp.so.19)

# 6. 设置头文件默认搜索路径
include_directories(${CMAKE_CURRENT_BINARY_DIR})
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../common)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../third/include)

# 8. 设置安装路径
INSTALL(TARGETS ${target} ${test_client} RUNTIME DESTINATION bin)

